2025-09-05
Considerar los siguientes vectores:
Tareas:
u <- c(4, -2)
v <- c(2, 1)
# Proyección de u sobre v
proj_u_on_v <- (sum(u * v) / sum(v * v)) * v
# Proyección de v sobre u
proj_v_on_u <- (sum(v * u) / sum(u * u)) * u
cat("Proyección de u sobre v:\n"); print(proj_u_on_v)
## Proyección de u sobre v:
## [1] 2.4 1.2
cat("Proyección de v sobre u:\n"); print(proj_v_on_u)
## Proyección de v sobre u:
## [1] 1.2 -0.6
Considerar la siguiente matriz:
\[A = \begin{pmatrix} 185 & -80 \\ -80 & 65 \end{pmatrix}\]
Tareas:
A <- matrix(c(185, -80, -80, 65), nrow=2, byrow=TRUE)
eigen_A <- eigen(A)
cat("Autovalores:\n"); print(eigen_A$values)
## Autovalores:
## [1] 225 25
cat("Autovectores:\n"); print(eigen_A$vectors) #pq no me da -2 1 y 1 -2?
## Autovectores:
## [,1] [,2] ## [1,] -0.8944272 -0.4472136 ## [2,] 0.4472136 -0.8944272
V <- eigen_A$vectors
D <- diag(eigen_A$values)
A_reconstructed <- V %*% D %*% solve(V)
cat("A reconstruida (V * D * V^-1):\n"); print(A_reconstructed)
## A reconstruida (V * D * V^-1):
## [,1] [,2] ## [1,] 185 -80 ## [2,] -80 65
cat("Matriz A original:\n"); print(A)
## Matriz A original:
## [,1] [,2] ## [1,] 185 -80 ## [2,] -80 65
Considerar la matriz \(B= \begin{pmatrix} 10 & -7 & 6 \\ -5 & 6 &2 \end{pmatrix}\)
Tareas:
Calcular los autovalores y autovectores de la matriz \(B\times B^T\). Obtener una matriz \(U\) disponiendo los autovectores como columnas y dividiendo por su norma.
Calcular los autovalores y autovectores de la matriz \(B^T\times B\) (Ayuda: los autovalores son los mismos que los de \(B\times B^T\), al que se le agrega un cero). Obtener una matriz \(V\) disponiendo los autovectores como columnas y dividiendo por su norma.
Descomponer la matriz \(B\) según sus valores singulares (\(B=U\times D\times V^T\))
B <- matrix(c(10, -7, 6, -5, 6, 2), nrow=2, byrow=TRUE)
BBt <- B %*% t(B)
eigen_BBt <- eigen(BBt)
cat("Autovalores de B*B^T:\n"); print(eigen_BBt$values)
## Autovalores de B*B^T:
## [1] 225 25
cat("Autovectores de B*B^T:\n"); print(eigen_BBt$vectors)
## Autovectores de B*B^T:
## [,1] [,2] ## [1,] -0.8944272 -0.4472136 ## [2,] 0.4472136 -0.8944272
U <- apply(eigen_BBt$vectors, 2, function(x) x / sqrt(sum(x^2)))
cat("Matriz U (autovectores normalizados):\n"); print(U)
## Matriz U (autovectores normalizados):
## [,1] [,2] ## [1,] -0.8944272 -0.4472136 ## [2,] 0.4472136 -0.8944272
Considerar los siguientes datos:
\[\begin{array}{cc} x & y \\ \hline 5820 & 5880\\ 6030 &5970\\ 5850 & 6060\\ 6120 & 5940\\ 6240 & 6000\\ 6000 & 6240\\ \end{array}\]
Calcular el vector de medias, la matriz de covarianza y la matriz de correlación para estos datos.
Calcular la distancia de Mahalanobis y la densidad normal multivariada de los primeros 3 datos utilizando el vector de medias \(\mu=(6000,6000)\) y matriz de covarianza \(\Sigma=\begin{pmatrix} 185 & -80 \\ -80 & 65 \end{pmatrix}\). ¿Qué observa?
## Vector de medias:
## x y ## 6010 6015
## Matriz de covarianza:
## x y ## x 25440 720 ## y 720 15750
## Matriz de correlación:
## x y ## x 1.00000000 0.03596944 ## y 0.03596944 1.00000000
## Distancias de Mahalanobis para los primeros 3 datos:
## 1 2 3 ## 38.241339 3.794733 11.063453
## Densidades normales multivariadas para los primeros 3 datos:
## 1 2 3 ## 5.899144e-321 1.584304e-06 5.596759e-30
Considerar las bases df_a.csv, df_b.csv y df_c.csv
Tareas:
scatGG=function(Base,x.Ch,y.Ch){
GG=_____ %>%
ggplot(aes(x=get(______),y=get(____)))+
geom_point(alpha=0.5)
return(GG)
}
textGG=function(GG,tL,xL,yL,tS,aTS,atS){
GG=GG+
labs(title = ______)+
xlab(___)+
ylab(____)+
theme_bw()+
theme(title = element_text(size=_____,face = "bold"),
axis.title = element_text(size=____,face = "plain"),
axis.text = element_text(size=___),
plot.title = element_text(hjust=0.5))
return(GG)
}
scatGG=function(Base,x.Ch,y.Ch){
GG=Base %>% # ← COMPLETO: Base
ggplot(aes(x=get(x.Ch),y=get(y.Ch)))+ # ← COMPLETO: x.Ch, y.Ch
geom_point(alpha=0.5)
return(GG)
}
textGG=function(GG,tL,xL,yL,tS,aTS,atS){
GG=GG+
labs(title = tL)+ # ← COMPLETO: tL
xlab(xL)+ # ← COMPLETO: xL
ylab(yL)+ # ← COMPLETO: yL
theme_bw()+
theme(title = element_text(size=tS,face = "bold"), # ← COMPLETO: tS
axis.title = element_text(size=aTS,face = "plain"), # ← COMPLETO: aTS
axis.text = element_text(size=atS), # ← COMPLETO: atS
plot.title = element_text(hjust=0.5))
return(GG)
}
# Scatterplot df_a g_a <- scatGG(df_a, "x", "y") g_a <- textGG(g_a, "Scatter df_a", "x", "y", 14, 10, 8) print(g_a)
# Scatterplot df_b g_b <- scatGG(df_b, "x", "y") g_b <- textGG(g_b, "Scatter df_b", "x", "y", 14, 10, 8) print(g_b)
# Scatterplot df_c g_c <- scatGG(df_c, "x", "y") g_c <- textGG(g_c, "Scatter df_c", "x", "y", 14, 10, 8) print(g_c)
## [1] "medias_a <- colMeans(df_a); medias_b <- colMeans(df_b); medias_c <- colMeans(df_c)"
## Medias df_a:
## x y ## 999.689 1500.017
## Medias df_b:
## x y ## 1000.067 1500.272
## Medias df_c:
## x y ## 1000.451 1500.073
# Matrices de covarianza
cov_a <- cov(df_a); cov_b <- cov(df_b); cov_c <- cov(df_c)
cat("Covarianza df_a:\n"); print(round(cov_a, 3))
## Covarianza df_a:
## x y ## x 36.633 -19.446 ## y -19.446 15.814
cat("Covarianza df_b:\n"); print(round(cov_b, 3))
## Covarianza df_b:
## x y ## x 1252.245 1193.867 ## y 1193.867 1209.422
## [1] "cor_a <- cor(df_a); cor_b <- cor(df_b); cor_c <- cor(df_c)"
## Correlación df_a:
## x y ## x 1.000 -0.808 ## y -0.808 1.000
## Correlación df_b:
## x y ## x 1.00 0.97 ## y 0.97 1.00
## Correlación df_c:
## x y ## x 1.000 0.551 ## y 0.551 1.000
dCont2DGG=function(Base,x.Ch,y.Ch){
GG=_____ %>%
ggplot(aes(x=get(____),y=get(____)))+
stat_density_2d(aes(color = ..level..)) +
scale_color_viridis_c()
return(GG)
}
dFill2DGG=function(Base,x.Ch,y.Ch){
GG=Base %>%
ggplot(aes(x=get(_____),y=get(_____)))+
stat_density_2d(aes(fill = ..density..),
geom = "raster", contour = FALSE) +
scale_fill_viridis_c()
return(GG)
}
dCont2DGG=function(Base,x.Ch,y.Ch){
GG=Base %>% # ← COMPLETO: Base
ggplot(aes(x=get(x.Ch),y=get(y.Ch)))+ # ← COMPLETO: x.Ch, y.Ch
stat_density_2d(aes(color = ..level..)) +
scale_color_viridis_c()
return(GG)
}
dFill2DGG=function(Base,x.Ch,y.Ch){
GG=Base %>% # ← COMPLETO: Base
ggplot(aes(x=get(x.Ch),y=get(y.Ch)))+ # ← COMPLETO: x.Ch, y.Ch
stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) +
scale_fill_viridis_c()
return(GG)
}
# Densidad con contornos df_a g2_a <- dCont2DGG(df_a, "x", "y") g2_a <- textGG(g2_a, "Densidad Contornos df_a", "x", "y", 14, 10, 8) print(g2_a)
# Densidad con heatmap df_a g3_a <- dFill2DGG(df_a, "x", "y") g3_a <- textGG(g3_a, "Densidad Heatmap df_a", "x", "y", 14, 10, 8) print(g3_a)
# Densidad con contornos df_b g2_b <- dCont2DGG(df_b, "x", "y") g2_b <- textGG(g2_b, "Densidad Contornos df_b", "x", "y", 14, 10, 8) print(g2_b)
# Densidad con heatmap df_b g3_b <- dFill2DGG(df_b, "x", "y") g3_b <- textGG(g3_b, "Densidad Heatmap df_b", "x", "y", 14, 10, 8) print(g3_b)
# Densidad con contornos df_c g2_c <- dCont2DGG(df_c, "x", "y") g2_c <- textGG(g2_c, "Densidad Contornos df_c", "x", "y", 14, 10, 8) print(g2_c)
# Densidad con heatmap df_c g3_c <- dFill2DGG(df_c, "x", "y") g3_c <- textGG(g3_c, "Densidad Heatmap df_c", "x", "y", 14, 10, 8) print(g3_c)
GG_qqNorm=function(Base,y.Ch){
my=mean(Base[,_____])
sy=sd(_____[,____])
GG=Base %>%
ggplot(aes(sample=get(y.Ch)))+
stat_qq(distribution = qnorm,dparams = list(mean=____,sd=____))+
stat_qq_line(distribution = qnorm,dparams = list(mean=____,sd=___),
linetype="dashed",color="red")
return(GG)
}
histGG_Norm=function(Base,x.Ch){
mx=mean(____[,_____])
sx=_____(Base[,x.Ch])
xs=seq(mx-2.5*sx,mx+2.5*sx,length.out=500)
ds=dnorm(xs,mx,sx)
df_d=data.frame(x=xs,d=ds)
GG=Base %>%
ggplot(aes(x=get(_____)))+
geom_histogram(mapping=aes(y=..density..),color="blue",fill="white")+
geom_line(data = _____,mapping = aes(x=x,y=d),color="red")
return(GG)
}
GG_qqNorm=function(Base,y.Ch){
my=mean(Base[,y.Ch]) # ← COMPLETO: y.Ch
sy=sd(Base[,y.Ch]) # ← COMPLETO: Base[,y.Ch]
GG=Base %>%
ggplot(aes(sample=get(y.Ch)))+
stat_qq(distribution = qnorm,dparams = list(mean=my,sd=sy))+ # ← COMPLETO: my, sy
stat_qq_line(distribution = qnorm,dparams = list(mean=my,sd=sy), # ← COMPLETO: my, sy
linetype="dashed",color="red")
return(GG)
}
histGG_Norm=function(Base,x.Ch){
mx=mean(Base[,x.Ch]) # ← COMPLETO: Base[,x.Ch]
sx=sd(Base[,x.Ch]) # ← COMPLETO: sd
xs=seq(mx-2.5*sx,mx+2.5*sx,length.out=500)
ds=dnorm(xs,mx,sx)
df_d=data.frame(x=xs,d=ds)
GG=Base %>%
ggplot(aes(x=get(x.Ch)))+ # ← COMPLETO: x.Ch
geom_histogram(mapping=aes(y=..density..),color="blue",fill="white")+
geom_line(data = df_d,mapping = aes(x=x,y=d),color="red") # ← COMPLETO: df_d
return(GG)
}
# QQ-plots para x e y en df_a g4_a_x <- GG_qqNorm(df_a, "x") g4_a_x <- textGG(g4_a_x, "QQ-Plot df_a x", "Teóricos", "Muestrales", 12, 9, 7) g4_a_y <- GG_qqNorm(df_a, "y") g4_a_y <- textGG(g4_a_y, "QQ-Plot df_a y", "Teóricos", "Muestrales", 12, 9, 7) ggarrange(g4_a_x, g4_a_y, ncol=2, nrow=1)
# Histogramas para x e y en df_a g5_a_x <- histGG_Norm(df_a, "x") g5_a_x <- textGG(g5_a_x, "Histograma df_a x", "x", "Densidad", 12, 9, 7) g5_a_y <- histGG_Norm(df_a, "y") g5_a_y <- textGG(g5_a_y, "Histograma df_a y", "y", "Densidad", 12, 9, 7) ggarrange(g5_a_x, g5_a_y, ncol=2, nrow=1)
# QQ-plots para x e y en df_b g4_b_x <- GG_qqNorm(df_b, "x") g4_b_x <- textGG(g4_b_x, "QQ-Plot df_b x", "Teóricos", "Muestrales", 12, 9, 7) g4_b_y <- GG_qqNorm(df_b, "y") g4_b_y <- textGG(g4_b_y, "QQ-Plot df_b y", "Teóricos", "Muestrales", 12, 9, 7) ggarrange(g4_b_x, g4_b_y, ncol=2, nrow=1)
# Histogramas para x e y en df_b g5_b_x <- histGG_Norm(df_b, "x") g5_b_x <- textGG(g5_b_x, "Histograma df_b x", "x", "Densidad", 12, 9, 7) g5_b_y <- histGG_Norm(df_b, "y") g5_b_y <- textGG(g5_b_y, "Histograma df_b y", "y", "Densidad", 12, 9, 7) ggarrange(g5_b_x, g5_b_y, ncol=2, nrow=1)
# QQ-plots para x e y en df_c g4_c_x <- GG_qqNorm(df_c, "x") g4_c_x <- textGG(g4_c_x, "QQ-Plot df_c x", "Teóricos", "Muestrales", 12, 9, 7) g4_c_y <- GG_qqNorm(df_c, "y") g4_c_y <- textGG(g4_c_y, "QQ-Plot df_c y", "Teóricos", "Muestrales", 12, 9, 7) ggarrange(g4_c_x, g4_c_y, ncol=2, nrow=1)
# Histogramas para x e y en df_c g5_c_x <- histGG_Norm(df_c, "x") g5_c_x <- textGG(g5_c_x, "Histograma df_c x", "x", "Densidad", 12, 9, 7) g5_c_y <- histGG_Norm(df_c, "y") g5_c_y <- textGG(g5_c_y, "Histograma df_c y", "y", "Densidad", 12, 9, 7) ggarrange(g5_c_x, g5_c_y, ncol=2, nrow=1)
# Análisis comparativo de las tres bases
cat("Correlaciones:\n")
## Correlaciones:
cat("• df_a:", round(cor_a[1,2], 3), "\n")
## • df_a: -0.808
cat("• df_b:", round(cor_b[1,2], 3), "\n")
## • df_b: 0.97
cat("• df_c:", round(cor_c[1,2], 3), "\n\n")
## • df_c: 0.551
¿Cuál de las bases tiene una distribución que se asemeja a una normal multivariada?
A partir de los análisis y gráficos realizados en esta parte, se puede notar que:
df_a:
df_b:
df_c:
La base que más se asemeja a una distribución normal multivariada es df_c
Muchas Gracias